Your goal is to create this plot using plotly.
Download https://michaelgastner.com/DAVisR_data/life_quality.csv.
Make a scatterplot where:
mode = "markers"lq |>
plot_ly(
x = ~gdp_per_capita,
y = ~life_expectancy,
mode = "markers",
type = "scatter")
Make sure you have two separate parameters color and colors:
color should specify which column or variable to map to the color of each point.colors should specify which colors or palette to use.You may use this palette for coloring continents:
colors <- c("#e41a1c", '#377eb8', '#4daf4a', '#984ea3', '#ff7f00')lq |>
plot_ly(
x = ~gdp_per_capita,
y = ~life_expectancy,
mode = "markers",
type = "scatter",
color = ~continent,
colors = colors)
Warning: line.width does not currently support multiple values.fill = ~'' in plot_ly(); this code assigns an empty string to fill.lq |>
plot_ly(
x = ~gdp_per_capita,
y = ~life_expectancy,
mode = "markers",
type = "scatter",
color = ~continent,
colors = colors,
fill = ~"",
size = ~pop,
# adjusts the range of sizes used
marker = list(
sizemode = "diameter",
opacity = 0.6,
sizes = c(10, 50)) # choosing the range of the bubble sizes
)
subplot function. You can try it once you are done with the rest of exercises.lq |>
plot_ly(
x = ~gdp_per_capita,
y = ~life_expectancy,
mode = "markers",
type = "scatter",
color = ~continent,
colors = colors,
fill = ~"",
size = ~pop,
marker = list(
sizemode = "diameter",
opacity = 0.6,
sizes = c(10, 50)
),
hoverinfo = "text",
# placing a dollar sign in front of GDP per Capita
text = ~ paste(
"Country:", country_name,
"<br>GDP per capita:", paste0("$", round(gdp_per_capita, digit = 2)),
# round off GDP per Capita and life expectancy to 2 digits
"<br>Life Expectancy:", paste(round(life_expectancy, digits = 2), "years"),
"<br>Population:", pop
)
)
layout()Change the axis labels and give the plot a title.
Add an appropriate legend.
Give credit to the World Bank as a source. To accomplish this, you may consider using the code below:
annotations = list(
x = 1.2, y = -0.1,
text = "Source: World Bank",
showarrow = F, xref = "paper", yref = "paper",
xanchor = "right", yanchor = "auto", xshift = 0, yshift = 0,
font = list(size = 12)
)lq |>
plot_ly(
x = ~gdp_per_capita,
y = ~life_expectancy,
mode = "markers",
type = "scatter",
color = ~continent,
colors = colors,
fill = ~"",
size = ~pop,
marker = list(
sizemode = "diameter",
opacity = 0.6,
sizes = c(10, 50),
# Add a thin white border around the points to make it easier to distinguish overlapping points
line = list(
width = 1,
color = "white"
)
),
hoverinfo = "text",
text = ~ paste(
"Country:", country_name,
"<br>GDP per capita:", paste0("$", round(gdp_per_capita, digit = 2)),
"<br>Life Expectancy:", paste(round(life_expectancy, digits = 2), "years"),
"<br>Population:", pop
)
) |>
layout(
title = "Wealth and Health by Country in 2015",
# making sure the sizes of the symbol in the legend are constant.
legend = list(
title = list(text = "<b> Continent <b>"),
itemsizing = "constant"
),
xaxis = list(
title = "GDP per capita (USD, PPP2015)",
type = "log",
showgrid = TRUE,
tickmode = "linear"
),
yaxis = list(
title = "Life Expectancy (years)"
),
annotations = list(
x = 1.2, y = -0.1,
text = "Source: World Bank",
showarrow = F, xref = "paper", yref = "paper",
xanchor = "right", yanchor = "auto", xshift = 0, yshift = 0,
font = list(size = 12)
)
)
Make sure the x-axis is log-tranformed.
To transform into a logarithmic axis, you should use this code:
xaxis = list(
type = "log",
showgrid = TRUE,
tickmode = "linear"
)Make sure the sizes of the symbol in the legend are constant.
Add a thin white border around the points to make it easier to distinguish overlapping points.
Feel free to make more adjustments if you think they will improve the quality of the plot.
Thank you!